sf_trees <- read_csv(here("data", "sf_trees", "sf_trees.csv"))
## Parsed with column specification:
## cols(
## tree_id = col_double(),
## legal_status = col_character(),
## species = col_character(),
## address = col_character(),
## site_order = col_double(),
## site_info = col_character(),
## caretaker = col_character(),
## date = col_date(format = ""),
## dbh = col_double(),
## plot_size = col_character(),
## latitude = col_double(),
## longitude = col_double()
## )
Refresh some skills for data wrangling and summary statistics using functions in the ‘dplyr’ package. Find the top five highest observations of trees by legal_status, do some wrangling, make a graph.
top_5_status <- sf_trees %>%
count(legal_status) %>% # recognize groups, finding counts, in a table
drop_na(legal_status) %>% # to remove missing values labeled NA
rename(tree_count = n) %>% # new name goes on the left, old name on the right
relocate(tree_count) %>% # moves tree_count to first column position
slice_max(tree_count, n = 5) # indicate in which colunn to look and the number you want to present, there is also slice_min available
ggplot(data = top_5_status, aes(x = fct_reorder(legal_status, tree_count), y = tree_count)) + # uce fct_reorder to reorganize data in order of tree_count, alternative to use convert to factor and use fct_reorder
geom_col() +
labs(x = "Legal Status", y = "Tree Count") +
coord_flip() + # flip the axes in case the names are too long on x axis
theme_minimal()
Only keep observations (rows) for Blackwood Acacia Trees
blackwood_acacia <- sf_trees %>%
filter(str_detect(species, "Blackwood Acacia")) %>% # looks within a variable (sf_trees data) that we specify to identify if there are any strings there, does not need to be a complete match, just part of the string
select(legal_status, date, latitude, longitude) # pick columns that you want to pick or exclude
ggplot(data = blackwood_acacia, aes(x = longitude, y = latitude)) +
geom_point()
## Warning: Removed 27 rows containing missing values (geom_point).
Useful for combining and separating columns
sf_trees_sep <- sf_trees %>%
separate(species, into =
c("spp_scientific", "spp_common"), sep = "::") # separate one column into two columns using data within that column, create a vector c with two new columns, then name the separator (::)
Exampe: tidyr::unite()
sf_trees_unite <- sf_trees %>%
unite("id_status", tree_id:legal_status, sep = "_cool!_") # combine two columns into one and add a separator ("_cool!_"), could use a vector or use a colon, which indicates "from this column to that column"
‘st_as_sf()’ to convert latitude and longitude to spatial coordinates
blackwood_acacia_spatial <- blackwood_acacia %>%
drop_na(longitude, latitude) %>%
st_as_sf(coords = c("longitude", "latitude")) # converts longitude and latitude to spatial data, use longitude first, then latitude second
st_crs(blackwood_acacia_spatial) = 4326 # 4-digit code from European Petroleum Survey Group for what the coordinate reference system is.
ggplot(data = blackwood_acacia_spatial) +
geom_sf(color = "darkgreen") +
labs(x = "Latitude",
y = "Longitude")
sf_map <- read_sf(here("data", "sf_map", "tl_2017_06075_roads.shp"))
Run in Console: # “st_transform(sf_map)” to look for existing projection information There is an existing CSR for the roads shapefile so we need to use st_transform.
st_transform(sf_map, 4326)
## Simple feature collection with 4087 features and 4 fields
## geometry type: LINESTRING
## dimension: XY
## bbox: xmin: -122.5136 ymin: 37.70813 xmax: -122.3496 ymax: 37.83213
## geographic CRS: WGS 84
## # A tibble: 4,087 x 5
## LINEARID FULLNAME RTTYP MTFCC geometry
## * <chr> <chr> <chr> <chr> <LINESTRING [°]>
## 1 110498938… Hwy 101 S O… M S1400 (-122.4041 37.74842, -122.404 37.7483, -…
## 2 110498937… Hwy 101 N o… M S1400 (-122.4744 37.80691, -122.4746 37.80684,…
## 3 110366022… Ludlow Aly … M S1780 (-122.4596 37.73853, -122.4596 37.73845,…
## 4 110608181… Mission Bay… M S1400 (-122.3946 37.77082, -122.3929 37.77092,…
## 5 110366689… 25th Ave N M S1400 (-122.4858 37.78953, -122.4855 37.78935,…
## 6 110368970… Willard N M S1400 (-122.457 37.77817, -122.457 37.77812, -…
## 7 110368970… 25th Ave N M S1400 (-122.4858 37.78953, -122.4858 37.78952,…
## 8 110498933… Avenue N M S1400 (-122.3643 37.81947, -122.3638 37.82064,…
## 9 110368970… 25th Ave N M S1400 (-122.4854 37.78983, -122.4858 37.78953)
## 10 110367749… Mission Bay… M S1400 (-122.3865 37.77086, -122.3878 37.77076,…
## # … with 4,077 more rows
ggplot(data = sf_map) +
geom_sf()
Combine blackwood acacia tree observations and SF roads map
ggplot() +
geom_sf(data = sf_map, size = 0.1, color = "darkgray") +
geom_sf(data = blackwood_acacia_spatial, color = "red", size = 0.5) +
theme_void()
maybe install leaflet
Now an interactive map:
tmap_mode("view") # default is "plot" which is static, "view" is interactive
## tmap mode set to interactive viewing
tm_shape(blackwood_acacia_spatial) +
tm_dots()